package com.li.proxy.cglib;

import org.springframework.cglib.proxy.Enhancer;

public class Client {
    public static void main(String[] args) {
        // 创建字节码增强器对象
        // 这个对象是CGLIB库当中的核心对象，就是依靠它来生成代理类的
        Enhancer enhancer = new Enhancer();

        //告诉CGLIB父类是谁/告诉CGLIB目标类是谁
        enhancer.setSuperclass(UserService.class);

        //设置回调（等同于JDK动态代理当中的调用处理器 InvocationHandler）
        //在CGLIB当中是方法拦截器接口：MethodInterceptor
        enhancer.setCallback(new TimerMethodInterceptor());

        //创建代理对象，这一步会做两件事：
        // 1. 在内存中生成UserService类的子类
        // 2. 创建代理对象
        UserService userServiceProxy = (UserService) enhancer.create();

        //建议大家能够把CGLIB动态代理生成的代理对象名字格式有点印象
        //根据这个名字可以推测框架底层是否使用了CGLIB动态代理
        //com.li.proxy.cglib.UserService$$EnhancerByCGLIB$$1d6dcd00@5594a1b5
        System.out.println(userServiceProxy.toString());

        //调用代理对象的代理方法。
        boolean success = userServiceProxy.login("admin", "123");
        System.out.println(success ? "登录成功": "登录失败");

        userServiceProxy.logout();
    }

}
